<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Catalog extends CI_Controller {
	var $perpage = 20;

		public function __construct() {
		   parent::__construct();
		   if (!$this->ion_auth->logged_in() || !$this->ion_auth->is_admin()) redirect('auth/login/'.str_replace("/", ".",$_SERVER['REQUEST_URI']));
		   $this->layout->setlayout('admin/layout');
		   $this->crumps->push('/admin/catalog/', 'Каталог товаров');
		   $this->users_rights_model->check_rights(strtolower(get_class()), $this->router->get_method());
	   }

	public function index($id = 0)	{
		$data['pages'] = $pages = $this->db->select()->from('catalog_parents')->where('parent_parent', $id)->order_by('parent_order', 'asc')->get()->result_array();
		$data['items'] = $items = $this->db->select()->from('catalog_items')->where('item_parent', $id)->order_by('item_order', 'asc')->get()->result_array();
		$data['active_parent'] = $id;
		$active = $this->db->select()->from('catalog_parents')->where('parent_id', $id)->get()->row_array();
		$data['crumps'] = $this->catalog_service_model->getCrumpsForAdmin($active['parent_path'], 'admin/catalog/index');
		if ($id != 0) $data['active'] = $this->db->select()->from('catalog_parents')->where('parent_id', $id)->get()->row_array();
		$this->layout->view('admin/catalog/index', $data);
	}

	/* ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ */

	// добавление группы к категории
	public function custom_add_optgr($id = 0) {
		if ($id != 0) $page = $this->db->select()->from('catalog_parents')->where('parent_id', $id)->get()->row_array(); else echo "none";
		if ($_SERVER['REQUEST_METHOD'] == "POST") {
			$p_data = $this->input->post();
			$error = 0;
			if ($p_data['name'] != "") {
				$db_data['optgr_id'] = 0;
				$db_data['optgr_title'] = $p_data['name'];
				$db_data['optgr_parent'] = $id;
				$db_data['optgr_order'] = 1000;
				$this->db->insert('catalog_optgr', $db_data);
			}
		}
	}

	// добавление паметра к группе
	public function custom_add_opt($id = 0) {
		if ($id != 0) $page = $this->db->select()->from('catalog_parents')->where('parent_id', $id)->get()->row_array(); else echo "none";
		if ($_SERVER['REQUEST_METHOD'] == "POST") {
			$p_data = $this->input->post();
			$error = 0;
			if ($p_data['name'] != "" && $p_data['optgr'] != "") {
				$db_data['option_id'] = 0;
				$db_data['option_title'] = $p_data['name'];
				$db_data['option_parent'] = $id;
				$db_data['option_order'] = 1000;
				$db_data['option_optgr'] = $p_data['optgr'];
				$this->db->insert('catalog_options', $db_data);
			}
		}
	}

	// перемещение параметра по группам
	public function custom_move_opt($id = 0) {
		if ($id != 0) $page = $this->db->select()->from('catalog_parents')->where('parent_id', $id)->get()->row_array(); else echo "none";
		if ($_SERVER['REQUEST_METHOD'] == "POST") {
			$p_data = $this->input->post();
			$this->db->where('option_id', $p_data['option_id'])->set('option_optgr', $p_data['group_id'])->update('catalog_options');
			$optgr = $this->db->select()->from('catalog_optgr')->where('optgr_id', $p_data['group_id'])->get()->row_array();
			$this->db->where('value_option', $p_data['option_id'])->set('value_optgr', $p_data['group_id'])->set('value_optgr_title', $optgr['optgr_title'])->update('catalog_values');
		}
	}

	// сортировка групп
	public function custom_order_optgr() {
		if ($_SERVER['REQUEST_METHOD'] == "POST") {
			$p_data = $this->input->post();
			foreach ($p_data['catid'] as $k=>$v) {
				if ($v != "new")
				$this->db->set('optgr_order', $k)->where('optgr_id', $v)->update('catalog_optgr');
			}
		}
	}

	// сортировка опций
	public function custom_order_options() {
		if ($_SERVER['REQUEST_METHOD'] == "POST") {
			$p_data = $this->input->post();
			foreach ($p_data['optid'] as $k=>$v) {
				if ($v != "new")
				$this->db->set('option_order', $k)->where('option_id', $v)->update('catalog_options');
			}
		}
	}

	// обновление названия группы
	public function custom_save_optgr($id = 0) {
		if ($_SERVER['REQUEST_METHOD'] == "POST") {
			$p_data = $this->input->post();
			$this->db->set('optgr_title', $p_data['name'])->where('optgr_id', str_replace("optgr_update_","",$id))->update('catalog_optgr');
			$this->db->set('value_optgr_title', $p_data['name'])->where('value_optgr', str_replace("optgr_update_","",$id))->update('catalog_values');
		}
	}

	// обновление названия параметра
	public function custom_save_option($id = 0) {
		if ($_SERVER['REQUEST_METHOD'] == "POST") {
			$p_data = $this->input->post();
			$this->db->set('option_title', $p_data['name'])->where('option_id', str_replace("optid_input_","",$id))->update('catalog_options');
			$this->db->set('value_option_title', $p_data['name'])->where('value_option', str_replace("optid_input_","",$id))->update('catalog_values');
		}
	}

	// удаление параметра
	public function custom_delete_option($id = 0) {
		if ($_SERVER['REQUEST_METHOD'] == "POST") {
			$this->db->where('option_id', $id)->delete('catalog_options');
			$this->db->where('value_option', $id)->delete('catalog_values');
		}
	}

	// удаление группы параметров
	public function custom_delete_optgr($id = 0) {
		if ($_SERVER['REQUEST_METHOD'] == "POST") {
			$this->db->where('option_optgr', $id)->delete('catalog_options');
			$this->db->where('value_optgr', $id)->delete('catalog_values');
			$this->db->where('optgr_id', $id)->delete('catalog_optgr');
		}
	}

	// копирование набора данных из одной категории в другую
	public function custom_copy($from, $to) {
		$list = $this->db->select()->from('catalog_optgr')->where('optgr_parent', $from)->order_by('optgr_order', 'asc')->get()->result_array();
		foreach ($list as $i) {
				$db_data = array();
				$db_data['optgr_id'] = 0;
				$db_data['optgr_title'] = $i['optgr_title'];
				$db_data['optgr_parent'] = $to;
				$db_data['optgr_order'] = $db_data['optgr_order'];
				$this->db->insert('catalog_optgr', $db_data);
				$o = $this->db->insert_id();
				$options = $this->db->select()->from('catalog_options')->where('option_optgr', $i['optgr_id'])->order_by('option_order', 'asc')->get()->result_array();
				foreach ($options as $option) {
					$db_data = array();
					$db_data['option_id'] = 0;
					$db_data['option_title'] = $option['option_title'];
					$db_data['option_parent'] = $to;
					$db_data['option_order'] = $option['option_order'];
					$db_data['option_optgr'] = $o;
					$this->db->insert('catalog_options', $db_data);
				}
		}
		redirect("admin/catalog/edit/parent/".$to."/");
	}

	// вывод МЕГАФОРМЫ редактирования групп и параметров для категории
	public function custom_edit_fields($id = 0, $return = false) {
		if ($id != 0) $page = $this->db->select()->from('catalog_parents')->where('parent_id', $id)->get()->row_array(); else echo "none";

		$list = $this->db->select()->from('catalog_optgr')->where('optgr_parent', $id)->order_by('optgr_order', 'asc')->get()->result_array();

		$fields = "<ul class='cat_fields'>"; // catalog_parent_id
		foreach ($list as $i) {
			$fields .= "<li id='catid_".$i['optgr_id']."'>";
			$fields .= "<img src='/data/images/arrow-move.png' class='handle_cat' alt='Сортировка категорий' title='Сортировка категорий' /><input type='text' class='optgr_update' id='optgr_update_".$i['optgr_id']."' value='".$i['optgr_title']."' />";
			$options = $this->db->select()->from('catalog_options')->where('option_optgr', $i['optgr_id'])->order_by('option_order', 'asc')->get()->result_array();
				$fields .= " <a href='#' class='optgr_save' rel='optgr_update_".$i['optgr_id']."'>Сохранить</a>";
			if (sizeof($options) == 0) {
				$fields .= " <a href='#' class='delete delete_optgr' rel='".$i['optgr_id']."'>Удалить</a>";
			}

				$fields .= "<ul>";
				foreach ($options as $option) {
					$fields .= "<li class='optid_".$option['option_id']."' id='optid_".$option['option_id']."'>";
					$fields .= "<img src='/data/images/arrow-move.png' alt='Сортировка опций' title='Сортировка опций' class='handle_option' />";
						$fields .= "<input type='text' value='".$option['option_title']."' id='optid_input_".$option['option_id']."' class='option_upgrade_input' />";
						$fields .= " <a href='#' class='option_save' rel='optid_input_".$option['option_id']."'>Сохранить</a>";
						$fields .= " <a href='#' class='delete delete_option' rel='".$option['option_id']."'>Удалить</a>";
						$fields .= " <div class='change_optgr_div'>";
							$fields .= "<a href='#' class='change_optgr' rel='".$option['option_id']."'>Изменить категорию &darr;</a>";
						$fields .= " </div><br class='cc'/>";
					$fields .= "</li>";
				}
					$fields .= "<li class='optid_new optid_new_".$i['optgr_id']."'>";
						$fields .= "<input type='text' value='Добавить новый параметр' class='input_add' /> <a href='#' class='add optid_add' rel='".$i['optgr_id']."'>Добавить</a>";
					$fields .= "</li>";
				$fields .= "</ul>";

			$fields .= "</li>";
		}
		$fields .= "<li id='catid_new'>";
			$fields .= "<input type='text' class='input_add' value='Добавить новую категорию' /> <a href='#' class='catid_add add'>Добавить</a>";
		$fields .= "</li>";
		$fields .= "</ul>";

		$fields .= "<div class='allready_have_optgr'>"; // catalog_parent_id
		$fields .= "<ul class=''>"; // catalog_parent_id
			foreach ($list as $i) {
				$fields .= "<li>";
					$fields .= "<a href='".$i['optgr_title']."' class='move_option_to_optgr' rel='".$i['optgr_id']."'>".$i['optgr_title']."</a>";
				$fields .= "</li>";
			}
		$fields .= "</ul>";
		$fields .= "</div>";

		if (sizeof($list) == 0) {
			$fields .= "<strong style='font-size: 16px;'>Скопировать набор полей из другой категории каталога товаров</strong>";
			$all_parents = $this->db->select('parent_title, parent_path, parent_id, parent_parent')->from('catalog_parents')->order_by('parent_path', 'asc')->get()->result_array();
			foreach ($all_parents as $t) {
				$attr = array();
				$seg = sizeof(explode("&", $t['parent_path'])) - 1;
				$i = 0;
				$add_text = "";
				while($i < $seg) {
					$add_text .= "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
					$i++;
				}
				$fields .= "<div>".$add_text."&rarr;&nbsp;<a href='/admin/catalog/custom_copy/".$t['parent_id']."/".$id."/'>".$t['parent_title']."</a></div>";
			}
		}


		if ($return) return $fields; else echo $fields;
	}

	/* ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ */

	public function edit_parent($id = 0, $active_parent) {
		if ($id != 0) $data['page'] = $page = $this->db->select()->from('catalog_parents')->where('parent_id', $id)->get()->row_array();
		if ($id != 0 && $page['parent_parent'] != 0) $this->crumps->push('/admin/catalog/index/'.$page['parent_parent'].'/', "Родительская категория");
		$this->crumps->push('/admin/catalog/'.($id == 0?'add/parent':'edit/parent/'.$id).'/', ($id == 0?"Добавление категории":"Редактирование категории"));
		if ($id != 0 && sizeof($page) <= 0) redirect('admin/catalog');

		$form = new jQuickForm('simple');

		if ($id == 0) $page['parent_parent'] = $active_parent;

		$random = md5(time()).md5(md5(time()));

		$form->addElement('hidden', 'random')->setValue($random);
		$form->setLabel(($id == 0?"Добавление":"Редактирование").' категории товаров');

		$form->insertInputText('parent_title')->setLabel('Название')->addRuleRequired();
		$form->insertInputText('parent_h1')->setLabel('Заголовок внутри категории');
		$form->insertInputText('parent_meta')->setLabel('Значение для тега title');
		$form->insertInputText('parent_metadesc')->setLabel('Значение для тега description');
		$form->insertInputText('parent_metakey')->setLabel('Значение для тега keywords');
		//$form->insertInputText('parent_curl')->setLabel('Адрес категории CURL')->addRuleRequired();
//		$form->insertFCKeditor('parent_desc')->setLabel('Описание категории')->setHeight('200');


		$select = $form->insertSelect('parent_parent')->setLabel('Раздел для категории');
		$this->catalog_service_model->show_select($select, $id);
		$form->insertInputCheckbox('parent_show_in_mainpage', 1)->setLabel("Показывать на главной странице");

		//$fields = $this->custom_edit_fields($id, true);

		$form->insertStatic("<h3><strong>Дополнительные поля для товаров</strong></h3>");
		$gr = $form->insertGroup()->addClass('col col2');
		$gr->insertInputText('parent_custom_field_1')->setLabel('Название дополнительного поля №1')->setComment('Поле отображается только в карточке товара');
		$gr->insertInputText('parent_custom_field_2')->setLabel('Название дополнительного поля №2')->setComment('Поле отображается только в карточке товара');
		$gr->insertInputText('parent_custom_field_3')->setLabel('Название дополнительного поля №3')->setComment('Поле отображается только в сравнении');
		$gr->insertInputText('parent_custom_field_4')->setLabel('Название дополнительного поля №4')->setComment('Поле отображается только в сравнении');
		$gr->insertInputText('parent_custom_field_5')->setLabel('Название дополнительного поля №5')->setComment('Поле отображается только в сравнении');
		$gr->insertInputText('parent_custom_field_6')->setLabel('Название дополнительного поля №6')->setComment('Поле отображается только в сравнении');
		$gr->insertInputText('parent_custom_field_7')->setLabel('Название дополнительного поля №7')->setComment('Поле отображается только в сравнении');
		$gr->insertInputText('parent_custom_field_8')->setLabel('Название дополнительного поля №8')->setComment('Поле отображается только в сравнении');
		//$form->insertStatic("<input type='hidden' value='".$page['parent_id']."' id='cp_id' /><div class='custom_fields_div'>".$fields."</div>");

		if ($id != 0 && $page['parent_image'] != "") {
			$file = $page['parent_image'];
			$im = getimagesize('./uploads/catalog_parents/'.$id.'/small/'.$file);
			$padding = round((150 - $im[1]) / 2);
			$text = "<div class=\"multi_upload_preview\"><img style='margin: ".$padding."px 0 0 0;' src='/uploads/catalog_parents/".$id."/small/".$file."' alt='Новое изображение' title='Новое изображение' /><a href='#' class='deleteimage' rel=\"one:uploads:catalog_parents:".$id.":".$file."\"><img src='/data/images/icons/delete.png' alt='Удалить' title='Удалить' /></a></div>";
		}

		$form->insertStatic("<div class='loaded_images' id='loaded_images_parent_image_0'>".$text."<br class='cc' /></div>");

		$post_params = array(
			'max_middle_height' => 200,
			'max_middle_width' => 200,
			'max_small_height' => 120,
			'max_small_width' => 120,
			'width' => '200',
			'height' => '200',
			'random' => $random,
			'session' => $this->session->userdata('session_id')
		);
		$form->insertMultiUpload('parent_image', '/admin/tools/upload/parent/', $post_params, 1, false, 2048000)->setId('parent_image_0')->setLabel('Фотография для категории')->setComment('Максимум только одна фотография (jcatalog/png/gif, 1024Kb, 1000*1000px)');

		if ($_SERVER['REQUEST_METHOD'] == "POST" && $form->validate()) {
			if ($id == 0) {
				$p_data = $this->input->post();

				$rand = $p_data['random'];
				unset($p_data['random']);

				$p_data['parent_status'] = 1;
				if(!$p_data['parent_show_in_mainpage']) $p_data['parent_show_in_mainpage'] = 0;

				$this->db->insert('catalog_parents', $p_data);
				$result = $this->db->insert_id();

				$files = $this->tools_model->copyfiles($rand, $result, 'catalog_parents');
				if (sizeof($files) > 0) $this->db->update('catalog_parents', array('parent_image' => $files[0]), array('parent_id' => $result));
				$this->catalog_service_model->updateAllPath();
				$this->session->set_flashdata('msg', 'Успешно добавлено');
				redirect('admin/catalog/edit/parent/'.$result.'/');
			} else {
				$p_data = $this->input->post();

				$rand = $p_data['random'];
				unset($p_data['random']);
				if(!$p_data['parent_show_in_mainpage']) $p_data['parent_show_in_mainpage'] = 0;

				$files = $this->tools_model->copyfiles($rand, $id, 'catalog_parents');
				if (sizeof($files) > 0) $p_data['parent_image'] = $files[0]; else unset($p_data['parent_image']);

				$this->db->where('parent_id', $id)->update('catalog_parents', $p_data);
				$this->catalog_service_model->updateAllPath();
				$this->session->set_flashdata('msg', 'Успешно обновлено');
				redirect('admin/catalog/edit/parent/'.$id.'/');
			}
		}
		$form->insertInputSubmit(($id == 0?"Добавить":"Сохранить"));

		$form->addDataSource(new HTML_QuickForm2_DataSource_Array($page));
		$data['form'] = $form."";
		$data['js'] = jQuickForm::js()->getJsAll();
		$this->layout->view('admin/catalog/edit', $data);
	}
	public function edit_item($id = 0, $active_parent) {
		if ($id != 0) $data['page'] = $page = $this->db->select()->from('catalog_items')->where('item_id', $id)->get()->row_array();
		if ($id != 0 && $page['item_parent'] != 0) $this->crumps->push('/admin/catalog/index/'.$page['item_parent'].'/', "Родительская категория");
		$this->crumps->push('/admin/catalog/'.($id == 0?'add/item':'edit/item/'.$id).'/', ($id == 0?"Добавление товара":"Редактирование товара"));
		if ($id != 0 && sizeof($page) <= 0) redirect('admin/catalog');

		$line = json_decode($page['item_sizes'], true);
		foreach ($line as $k => $v) {
			$sizes_line .= $k.":".number_format($v, 2)."\n";
		}
		$data['page']['item_sizes'] = $page['item_sizes'] = $sizes_line;

		$form = new jQuickForm('simple');

		if ($id == 0) $page['item_parent'] = $active_parent;

		$random = md5(time()).md5(md5(time()));

		$form->addElement('hidden', 'random')->setValue($random);
		$form->setLabel(($id == 0?"Добавление":"Редактирование").' товара');

//		$gr = $form->insertGroup()->addClass('col col2');
		$form->insertInputText('item_title')->setLabel('Название')->addRuleRequired();

		$gr = $form->insertGroup()->addClass('col col2');
		$pricing = $gr->insertInputText('item_price')->setLabel('Стоимость товара в рублях')->setComment('Дробное число 2 знака после запятой')->setExample('100.50');
		$pricing->addRule('callback', 'Не верный формат', array('callback' => 'valid_float'), HTML_QuickForm2_Rule::CLIENT);
		$pricing->addRule('callback', 'Не верный формат', array('callback' => 'valid_float'), HTML_QuickForm2_Rule::SERVER);
		$pricing->addRuleRequired();

		$pricing = $gr->insertInputText('item_old_price')->setLabel('Старая цена')->setComment('Дробное число 2 знака после запятой')->setExample('230.50');
		$pricing->addRule('callback', 'Не верный формат', array('callback' => 'valid_float'), HTML_QuickForm2_Rule::CLIENT);
		$pricing->addRule('callback', 'Не верный формат', array('callback' => 'valid_float'), HTML_QuickForm2_Rule::SERVER);
		$gr->insertInputText('item_have')->setLabel("Количество в наличии");


		$select = $gr->insertSelect('item_parent')->setLabel('Раздел для товара');
		$this->catalog_service_model->show_select($select, null);
		$fieldset = $form->insertFieldset();
		$fieldset->insertInputText('item_pagetitle')->setLabel('Текст для тега Title');
		$fieldset->insertInputText('item_pagedesc')->setLabel('Текст для тега Description');
		$fieldset->insertInputText('item_pagekeys')->setLabel('Текст для тега Keywords');
//		$form->insertFCKeditor('item_snippet')->setLabel('Сниппет для товара')->setComment('Если не указан, будет сформирован автоматически. Переменная %item_name% будет заменена на название товара.')->setHeight(100);

		$brands = $this->db->select()->from('catalog_brands')->where('brand_status',1)->get()->result_array();
		$select = $gr->insertSelect('item_brand')->setLabel('Бренд товара');
		$select->addOption('Без бренда', 0);
		foreach ($brands as $brand) {
			$select->addOption($brand['brand_title'], $brand['brand_id']);
		}
		$select->addRuleRequired();

		$fieldset = $form->insertFieldset('');
		$gr = $fieldset->insertGroup()->addClass('col col3 chk');
		$gr->insertInputCheckbox('item_hit', 1)->setLabel("Хит продаж");

		$text = "";
		if ($id != 0) {
			$mfiles = $this->db->select()->from('catalog_images')->order_by('photo_order', 'asc')->where('photo_item', $id)->get()->result_array();
			foreach ($mfiles as $mfile) {
				$file = $mfile['photo_file'];
				$im = getimagesize('./uploads/catalog_items/'.$id.'/small/'.$file);
				$padding = round((150 - $im[1]) / 2);
				$text .= "<div class=\"multi_upload_preview ".($mfile['photo_main']==1?"border_red":"")." oldphotos\" id='photo_".$mfile['photo_id']."'><img style='margin: ".$padding."px 0 0 0;' src='/uploads/catalog_items/".$id."/small/".$file."' alt='Новое изображение' title='Новое изображение' />";
					$text .= "<a href='#' rel=\"multi:uploads:catalog_items:".$id.":".$file."\" class='deleteimage'><img src='/data/images/icons/delete.png' alt='Удалить' title='Удалить' /></a>";
					$text .= "<a href='#' rel=\"".$id.":".$mfile['photo_id']."\" class='setmainimage right_corner'><img src='/data/images/icons/image_set_main.png' alt='Сделать главной' title='Сделать главной' /></a>";
				$text .= "</div>";
			}
		}

		$form->insertStatic("<div class='loaded_images' id='loaded_images_item_image_0'>".$text."<br class='cc' /></div>");

		$post_params = array(
			'middle_required' => true,
			'small_required' => true,
			'middle_type' => 'min',
			'small_type' => 'max',
			'max_middle_height' => 300,
			'max_middle_width' => 300,
			'max_small_height' => 120,
			'max_small_width' => 120,
			'random' => $random,
			'session' => $this->session->userdata('session_id')
		);
		$form->insertMultiUpload('item_image', '/admin/tools/upload/item/', $post_params, 20, true, 2048000)->setId('item_image_0')->setLabel('Фотографии для товара')->setComment('До 20 фотографий (jpg/png/gif, 1024Kb, 1000*1000px каждая), <strong>сортировка осуществляется перетаскиванием изображений</strong>.<br /><span style="color: red;">Сделать фото главным или отсортировать можно только после сохранения товара</span>');

		$form->insertFCKeditor('item_text')->setLabel('Описание товара для страницы товара')->setRows('10');
		$form->insertTextarea('item_desc')->setLabel('Описание товара для страницы каталога')->setHeight('200');
		$form->insertTextarea('item_compare')->setLabel('Описание товара для страницы сравнения')->setRows('10');

		$afields = $this->db->select()->from('catalog_parents')->where('parent_id', $page['item_parent'])->get()->row_array();

		$fieldset = $form->insertFieldset("Дополнительные поля для товаров");
		$gr = $fieldset->insertGroup()->addClass('col col2');
		$gr->insertInputText('item_custom_field_1')->setLabel(($afields['parent_custom_field_1']?$afields['parent_custom_field_1']:"Параметр 1"))->setComment('Поле отображается только в карточке товара');
		$gr->insertInputText('item_custom_field_2')->setLabel(($afields['parent_custom_field_2']?$afields['parent_custom_field_2']:"Параметр 2"))->setComment('Поле отображается только в карточке товара');
		$gr->insertInputText('item_custom_field_3')->setLabel(($afields['parent_custom_field_3']?$afields['parent_custom_field_3']:"Параметр 3"))->setComment('Поле отображается только в сравнении');
		$gr->insertInputText('item_custom_field_4')->setLabel(($afields['parent_custom_field_4']?$afields['parent_custom_field_4']:"Параметр 4"))->setComment('Поле отображается только в сравнении');
		$gr->insertInputText('item_custom_field_5')->setLabel(($afields['parent_custom_field_5']?$afields['parent_custom_field_5']:"Параметр 5"))->setComment('Поле отображается только в сравнении');
		$gr->insertInputText('item_custom_field_6')->setLabel(($afields['parent_custom_field_6']?$afields['parent_custom_field_6']:"Параметр 6"))->setComment('Поле отображается только в сравнении');
		$gr->insertInputText('item_custom_field_7')->setLabel(($afields['parent_custom_field_7']?$afields['parent_custom_field_7']:"Параметр 7"))->setComment('Поле отображается только в сравнении');
		$gr->insertInputText('item_custom_field_8')->setLabel(($afields['parent_custom_field_8']?$afields['parent_custom_field_8']:"Параметр 8"))->setComment('Поле отображается только в сравнении');

		$text = "";
		$together = $this->db->select()->from('catalog_together')->where('together_item', $id)->order_by('together_id', 'asc')->get()->result_array();
		foreach ($together as $to) {
			$inf = $this->db->select('item_title')->from('catalog_items')->where('item_id', $to['together_value'])->get()->row_array();
			$text .= "<div id='together_".$to['together_id']."' class='one_together'>".$inf['item_title']." <a href='#' class='delete_together' rel='".$to['together_value'].":".$id."'><img src='/data/images/icons/delete.png' alt='Удалить' title='Удалить' /></a></div>";
		}

		if ($id != 0) {
			$fieldset = $form->insertFieldset('С этим товаров покупают');
			$fieldset->insertInputText('item_name_same')->setLabel('Заголовок раздела похожих товаров');
			$fieldset->insertInputText('together')->setId('together_select')->setAttribute('rel', $id)->setLabel('Товары')->setComment('Начинайте вводить название товара, затем выберите его из списка');
			$fieldset->insertStatic("<div class='together'>".$text."</div>");
		}


		if ($_SERVER['REQUEST_METHOD'] == "POST" && $form->validate()) {
			if ($id == 0) {
				$p_data = $this->input->post();

				$rand = $p_data['random'];
				unset($p_data['random']);
				unset($p_data['item_image']);
				unset($p_data['together']);

				if ($p_data['item_hit'] == "") $p_data['item_hit'] = 0;
				if ($p_data['item_have'] == "") $p_data['item_have'] = 0;
				if ($p_data['item_old_price'] == "") unset($p_data['item_old_price']);

				$p_data['item_status'] = 1;

				$this->db->insert('catalog_items', $p_data);
				$result = $this->db->insert_id();

				$files = $this->tools_model->copyfiles($rand, $result, 'catalog_items');
				$u = 1;
				if (sizeof($files) > 0) foreach ($files as $file) {
					$image_data['photo_id'] = 0;
					$image_data['photo_file'] = $file;
					$image_data['photo_item'] = $result;
					$image_data['photo_order'] = 1000;
					$image_data['photo_main'] = $u;
					$this->db->insert('catalog_images', $image_data);
					$u=0;
				}
				$this->session->set_flashdata('msg', 'Успешно добавлено');
				redirect('admin/catalog/edit/item/'.$result.'/');
			} else {
				$p_data = $this->input->post();

				$rand = $p_data['random'];
				$options = $p_data['option'];
				unset($p_data['random']);
				unset($p_data['option']);
				unset($p_data['item_image']);
				unset($p_data['together']);

				foreach ($options as $k => $v) {
					$checkout = $this->db->select()->from('catalog_values')->where('value_item', $id)->where('value_option', $k)->get()->row_array();
					if (sizeof($checkout) > 0) {
						$this_option = $this->db->select()->from('catalog_options')->where('option_id', $k)->get()->row_array();
						$this_optgr = $this->db->select()->from('catalog_optgr')->where('optgr_id', $this_option['option_optgr'])->get()->row_array();
						$up_data['value_value'] = $v;
						$up_data['value_option_title'] = $this_option['option_title'];
						$up_data['value_optgr_title'] = $this_optgr['optgr_title'];
						$this->db->where('value_item', $id)->where('value_option', $k)->update('catalog_values', $up_data);
					} else {
						$this_option = $this->db->select()->from('catalog_options')->where('option_id', $k)->get()->row_array();
						$this_optigr = $this->db->select()->from('catalog_optgr')->where('optgr_id', $this_option['option_optgr'])->get()->row_array();
						$insert_value['value_id'] = 0;
						$insert_value['value_value'] = $v;
						$insert_value['value_option'] = $k;
						$insert_value['value_option_title'] = $this_option['option_title'];
						$insert_value['value_optgr'] = $this_option['option_parent'];
						$insert_value['value_optgr_title'] = $this_optgr['optgr_title'];
						$insert_value['value_item'] = $id;
						//dump($insert_value);
						$this->db->insert('catalog_values', $insert_value);
					}
				}

				if ($p_data['item_hit'] == "") $p_data['item_hit'] = 0;
				if ($p_data['item_have'] == "") $p_data['item_have'] = 0;
				if ($p_data['item_old_price'] == "") unset($p_data['item_old_price']);
				$this->db->where('item_id', $id)->update('catalog_items', $p_data);
				$files = $this->tools_model->copyfiles($rand, $id, 'catalog_items');
				$havemain = $this->db->select()->from('catalog_images')->where('photo_item', $id)->where('photo_main', '1')->get()->result_array();
				if (sizeof($havemain) == 0) $u = 1; else $u = 0;
				foreach ($files as $file) {
					$image_data['photo_id'] = 0;
					$image_data['photo_file'] = $file;
					$image_data['photo_item'] = $id;
					$image_data['photo_order'] = 1000;
					$image_data['photo_main'] = $u;
					$u = 0;
					$this->db->insert('catalog_images', $image_data);
				}
				$this->session->set_flashdata('msg', 'Успешно обновлено');
				redirect('admin/catalog/edit/item/'.$id.'/');
			}
		}
		$form->insertInputSubmit(($id == 0?"Добавить":"Сохранить"));

		$form->addDataSource(new HTML_QuickForm2_DataSource_Array($page));
		$data['form'] = $form."";
		$data['js'] = jQuickForm::js()->getJsAll();
		$this->layout->view('admin/catalog/edit', $data);
	}
	public function delete_parent($id = 0) {
		if ($id != 0) $data['page'] = $page = $this->db->select()->from('catalog_parents')->where('parent_id', $id)->get()->row_array();
		if ($id != 0 && sizeof($page) <= 0) redirect('admin/catalog');
		$this->db->where('parent_id', $id)->delete('catalog_parents');
		$this->db->where('parent_parent', $id)->update('catalog_parents', array('parent_parent' => 0));
		$this->db->where('item_parent', $id)->update('catalog_items', array('item_parent' => 0));
		rrmdir("./uploads/catalog_parents/".$id);
		$this->session->set_flashdata('msg', 'Успешно удалено');
		redirect('admin/catalog/index/'.$page['parent_parent']);
	}
	public function delete_item($id = 0) {
		if ($id != 0) $data['page'] = $page = $this->db->select()->from('catalog_items')->where('item_id', $id)->get()->row_array();
		if ($id != 0 && sizeof($page) <= 0) redirect('admin/catalog');
		$this->db->where('item_id', $id)->delete('catalog_items');
		$this->db->where('photo_item', $id)->delete('catalog_images');
		$this->db->where('together_value', $id)->delete('catalog_together');
		$this->db->where('together_item', $id)->delete('catalog_together');
		rrmdir("./uploads/catalog_items/".$id);
		$this->session->set_flashdata('msg', 'Успешно удалено');
		redirect('admin/catalog/index/'.$page['item_parent']);
	}
	public function block($type, $id = 0) {
		if ($id != 0) $data['page'] = $page = $this->db->select()->from('catalog_'.$type.'s')->where($type.'_id', $id)->get()->row_array();
		if ($id != 0 && sizeof($page) <= 0) redirect('admin/catalog');
		$this->db->where($type.'_id', $id)->update('catalog_'.$type.'s', array($type.'_status' => 0));
		$this->session->set_flashdata('msg', 'Успешно');
		$p = $type.'_parent';
		redirect('admin/catalog/index/'.$page[$p].'/');
	}
	public function unblock($type, $id = 0) {
		if ($id != 0) $data['page'] = $page = $this->db->select()->from('catalog_'.$type.'s')->where($type.'_id', $id)->get()->row_array();
		if ($id != 0 && sizeof($page) <= 0) redirect('admin/catalog');
		$this->db->where($type.'_id', $id)->update('catalog_'.$type.'s', array($type.'_status' => 1));
		$this->session->set_flashdata('msg', 'Успешно');
		$p = $type.'_parent';
		redirect('admin/catalog/index/'.$page[$p].'/');
	}
	public function edit($type, $id) {
		$method = "edit_".$type;
		return $this->$method($id);
	}
	public function add($type = "", $active_parent) {
		if ($type == "") redirect('admin/catalog');
		$method = "edit_".$type;
		return $this->$method(0, $active_parent);
	}
	public function delete($type = "", $id) {
		$method = "delete_".$type;
		return $this->$method($id);
	}
	public function order($id) {
		$p_data = $this->input->post('order');
		foreach ($p_data['parent'] as $key => $val) {
			$this->db->update('catalog_parents', array('parent_order' => $val), array('parent_id' => $key));
		}
		foreach ($p_data['item'] as $key => $val) {
			$this->db->update('catalog_items', array('item_order' => $val), array('item_id' => $key));
		}
		$this->catalog_service_model->updateAllPath();
		$this->session->set_flashdata('msg', 'Успешно');
		redirect('admin/catalog/index/'.$id.'/');
	}
	function setmain() {
		$data = $this->input->post('data');
		$input = explode(":", $data);
		$this->db->where('photo_item', $input[0])->update('catalog_images', array('photo_main' => 0));
		$this->db->where('photo_id', $input[1])->update('catalog_images', array('photo_main' => 1));
		echo "ok";
	}
	function setorder() {
		$data = explode(",", $this->input->post('data'));
		foreach ($data as $key => $val) {
			$this->db->where('photo_id', intval(str_replace("photo_", "", $val)))->update('catalog_images', array('photo_order' => $key));
		}
		echo "ok";
	}
	function together() {
		$term = $this->input->get('term');
		$in = explode(" ", $term);

		$this->db->select('item_title, item_id')->from('catalog_items')->where('item_id != ', 0);
		foreach ($in as $i) {
			if ($i != "") {
				$this->db->like('item_title', $i);
			}
		}
		$items = $this->db->limit(10)->get()->result_array();
		foreach ($items as $item) {
			$out[] = array('label' => $item['item_title'], 'value' => $item['item_id']);
		}
		echo json_encode($out);

	}
	function together_add() {
		$check = $this->db->select()->from('catalog_together')->where('together_item', $this->input->post('item'))->where('together_value', $this->input->post('id'))->get()->row_array();
		if (sizeof($check) <= 0) {
			$p_data['together_id'] = 0;
			$p_data['together_item'] = $this->input->post('item', TRUE);
			$p_data['together_value'] = $this->input->post('id', TRUE);
			$this->db->insert('catalog_together', $p_data);
			echo "ok:".$this->db->insert_id();
		} else {
			echo $check['together_id'];
		}
	}
	function together_delete() {
		$data = $this->input->post('data');
		$in = explode(":", $data);
		dump($in);
		$this->db->where('together_item', $in[1])->where('together_value', $in[0])->delete('catalog_together');
	}
	function setcolor() {
		$id = $this->input->post('data');
		$form = new jQuickForm('setcolor');
		$random = md5(time()).md5(md5(time()));
		$form->addElement('hidden', 'random')->setValue($random);
		$form->addElement('hidden', 'id')->setValue($id);
		$post_params = array(
			'max_width' => 25,
			'max_height' => 25,
			'random' => $random,
			'session' => $this->session->userdata('session_id')
		);
		$form->insertMultiUpload('pattern', '/admin/tools/upload/asd/', $post_params, 1, true, 2048000)->setId('pattern_0')->setLabel('Паттерн для фотографии')->setComment('1 фотография (jpg/png/gif, 50Kb, 25*25px)');

		$form->insertInputText('name')->setLabel('Название цвета/паттерна')->setId('pattern_name')->addRuleRequired();
		$form->insertStatic("<a href='#' class='add_action' id='save_pattern'>Сохранить</a>");

		$form->addDataSource(new HTML_QuickForm2_DataSource_Array($page));
		$data['id'] = $id;
		$data['form'] = $form."";
		$data['js'] = jQuickForm::js()->getJsAll();
		$this->load->view('admin/catalog/ajax', $data);
	}
	function save_pattern() {
		$p_data = $this->input->post();
		$files = $this->tools_model->copyfiles($p_data['random'], $p_data['id'], 'pattern');
		if (sizeof($files) > 0) {
			$pattern = $this->db->select()->from('catalog_images')->where('photo_id', $p_data['id'])->get()->row_array();
			if ($pattern['photo_pattern'] != "" && file_exists("./uploads/pattern/".$p_data['id']."/".$pattern['photo_pattern'])) {
				unlink("./uploads/pattern/".$p_data['id']."/".$pattern['photo_pattern']);
				unlink("./uploads/pattern/".$p_data['id']."/small/".$pattern['photo_pattern']);
				unlink("./uploads/pattern/".$p_data['id']."/middle/".$pattern['photo_pattern']);
			}
			$this->db->update('catalog_images', array('photo_pattern' => $files[0], 'photo_name' => $p_data['name']), array('photo_id' => $p_data['id']));
			$out['file'] = $files[0];
			$out['status'] = "ok";
		} else {
			$out['status'] = "error";
		}
		echo json_encode($out);
	}
}
